//
// Created by Administrator on 2025-06-19.
//

#pragma once

#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>

/**
 * 字节流式内存池
 * */

class ByteStreamPool
{
    struct Block
    {
        uint8_t *data;   // 实际的内存数据指针
        size_t capacity; // 这块 block 的总容量（字节）
        size_t used;     // 当前已经分配出去的字节数
    };

public:
    explicit ByteStreamPool(size_t blockSize = 64 * 1024);
    ~ByteStreamPool();

    void *alloc(size_t size);              // 从内存池中分配一块大小为 size 字节的内存。
    void free(void *ptr, size_t size);     // 归还一块内存池分配的内存

private:
    /**
     * 这个函数用于向操作系统申请一个新的大内存块（Block），当当前所有内存块都无法满足新的分配请求时调用。
     * */
    void allocateBlock(size_t minSize);

private:
    std::vector <Block> blocks_;
    std::vector <std::pair<void *, size_t>> freeList_;

    size_t blockSize_;
};

#endif


